today = time.strftime('%Y-%m-%d')
for id in ids:
partner_data = self.browse(cr, uid, id, context=context)
- if partner_data.membership_cancel and today > partner_data.membership_cancel:
- res[id] = 'canceled'
- continue
- if partner_data.membership_stop and today > partner_data.membership_stop:
- res[id] = 'old'
- continue
+ if not partner_data.free_member:
+ if partner_data.membership_cancel and today > partner_data.membership_cancel:
+ res[id] = 'canceled'
+ continue
+ if partner_data.membership_stop and today > partner_data.membership_stop:
+ res[id] = 'old'
+ continue
s = 4
if partner_data.member_lines:
for mline in partner_data.member_lines:
s = 5
else:
s = 6
+
+ if s == 6:
+ # special case when the partner is imported from a file,
+ # in this case is has a valid membership lines but
+ # no payment information associated, consider it valid
+
+ no_payment_info_at_all = True
+ valid_line = False
+
+ for mline in partner_data.member_lines:
+ if mline.date_to >= today:
+ valid_line = True
+
+ if mline.account_invoice_line or mline.pos_order_line:
+ no_payment_info_at_all = False
+
+ if no_payment_info_at_all and valid_line:
+ s = 0
+
if s == 0:
res[id] = 'paid'
elif s == 1:
res[id] = 'none'
if partner_data.free_member and s != 0:
res[id] = 'free'
- if partner_data.associate_member:
- res_state = self._membership_state(cr, uid, [partner_data.associate_member.id], name, args, context=context)
- res[id] = res_state[partner_data.associate_member.id]
return res
def _membership_date(self, cr, uid, ids, name, args, context=None):
res = {}
member_line_obj = self.pool.get('membership.membership_line')
for partner in self.browse(cr, uid, ids, context=context):
- if partner.associate_member:
- partner_id = partner.associate_member.id
- else:
- partner_id = partner.id
+ partner_id = partner.id
res[partner.id] = {
'membership_start': False,
'membership_stop': False,
return res
def onchange_partner_id(self, cr, uid, ids, part=False, context=None):
+ """
+ - Change membership stop value if partner change
+ - Change partner in membership line if s·he is change
+ """
if not part:
return {'value': {}}
res = super(pos_order, self).onchange_partner_id(cr, uid, ids, part=part, context=context)
membership_stop = self.pool.get('res.partner').browse(cr, uid, part, context=context).membership_stop
res['value']['membership_stop'] = membership_stop
+ ml_line_obj = self.pool.get('membership.membership_line')
+ pol_obj = self.pool.get('pos.order.line')
+ for id in ids:
+ pol_ids = pol_obj.search(cr, uid, [('order_id', '=', id)], context=context)
+ pols = pol_obj.browse(cr, uid, pol_ids, context=context)
+ for pol in pols:
+ if pol.product_id.membership:
+ ml_line_ids = ml_line_obj.search(cr, uid, [('pos_order_line', '=', pol.id)], context=context)
+ ml_line_obj.write(cr, uid, ml_line_ids, {'partner': part}, context=context)
return res
def _get_membership_stop(self, cr, uid, ids, name, args, context=None):
date_from = member_line.date_from
date_to = member_line.date_to
if line.product_id.membership_date2date:
- date_from = ('date_from' in context
- and context.get('date_from')
- and datetime.strptime(context('date_from'), "%Y-%m-%d")
- or date.today())
+ date_from = datetime.strptime(line.order_id.date_order, "%Y-%m-%d %H:%M:%S")
date_to = date_from + relativedelta(months=+12, days=-1) # TODO: parameterize this delta?
date_from = date_from.strftime("%Y-%m-%d")
date_to = date_to .strftime("%Y-%m-%d")
- member_line_obj.write(cr, uid, member_line.id
- , {'date_from': date_from
- ,'date_to' : date_to
+ member_line_obj.write(cr, uid, member_line.id, {
+ 'partner': line.order_id.partner_id and line.order_id.partner_id.id or False,
+ 'membership_id': line.product_id.id,
+ 'member_price': line.price_unit,
+ 'date': date_from,
+ 'date_from': date_from,
+ 'date_to': date_to,
+ 'pos_order_line': line.id,
}
, context=context)
if line.product_id.membership_grouped:
if line.order_id.date_order > date_from and line.order_id.date_order < date_to:
date_from = line.order_id.date_order
if line.product_id.membership_date2date:
- date_from = ('date_from' in context
- and context.get('date_from')
- and datetime.strptime(context.get('date_from'), "%Y-%m-%d")
- or date.today())
+ date_from = datetime.strptime(line.order_id.date_order, "%Y-%m-%d %H:%M:%S")
date_to = date_from + relativedelta(months=+12, days=-1) # TODO: parameterize this delta?
date_from = date_from.strftime("%Y-%m-%d")
date_to = date_to.strftime("%Y-%m-%d")
'partner': line.order_id.partner_id and line.order_id.partner_id.id or False,
'membership_id': line.product_id.id,
'member_price': line.price_unit,
- 'date': time.strftime('%Y-%m-%d'),
+ 'date': date_from,
'date_from': date_from,
'date_to': date_to,
'pos_order_line': line.id,